#ifndef __TFLY_LIST_H__
#define __TFLY_LIST_H__


typedef struct TFly_list_node{
	void *value;
	struct TFly_list_node *next;
}TFly_list_node_t;


typedef struct TFly_list{
	TFly_list_node_t *head;
	TFly_list_node_t *end;
	TFly_list_node_t *cnode;

}TFly_list_t;

typedef struct TFly_list_item{
	TFly_list_t *list;
	TFly_list_node_t *node;
	TFly_list_node_t *prev;
	int end:1;		// 标记链表已经遍历完成
	int flag:1;		// 标记当前节点已被删除，item_get时返回node的值
}TFly_list_item_t;

TFly_list_t *TFly_list_create(void);

int TFly_list_destroy(TFly_list_t *list);

int TFly_list_del(TFly_list_t *list, void *value);

void *TFly_list_del_first(TFly_list_t *list);

int TFly_list_add(TFly_list_t *list, void *value);

int TFly_list_add_head(TFly_list_t *list, void *value);

void *TFly_list_get_next(TFly_list_t *list);

void *TFly_list_get_first(TFly_list_t *list);

void *TFly_list_get_end(TFly_list_t *list);

TFly_list_item_t *TFly_list_get_item(TFly_list_t *list);
void TFly_list_item_destroy(TFly_list_item_t *item);
void *TFly_list_item_next(TFly_list_item_t *item);
void *TFly_list_item_get(TFly_list_t *list,TFly_list_item_t *item);
void TFly_list_item_delete(TFly_list_t *list, TFly_list_item_t *item);

#endif
